iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
Security

現在是pwn的天下!系列 第 9

【Day-9】Lazy binding & GOT

  • 分享至 

  • xImage
  •  

前言

在 Linux 程式的動態連結過程中,Lazy Binding 和 GOT 扮演著重要角色。要玩 GOT hijacking,先搞懂這兩個機制的原理,才有辦法往下動手

Lazy binding

Lazy binding 是dynamic linking的一種機制,dynamic linking的程式會在執行的時候才把library map到memory來用

  • 有時候一個程式可能使用到很多個libc function,程式執行到結束,不一定每一個function都會被call到
  • 有時候可能會有一直都沒被用到的libc fnction
  • Lazy binding的機制就是程式第一次呼叫library function的時候,才會去尋找function的位置,並將其填入GOT表中,後面再呼叫此function的時候就從GOT table裡面獲取它的位置

GOT

GOT,全稱Global offset table,他是一個function pointer的array,舉一個例子
這個table裡面第一格裡面存了一個printf的library的function pointer,第二個存read,第三個存write之類,這樣就是一個array存著不同library function

  • library的位置在載入的時候才決定,compiler在編譯的時候無法知道library function address
  • GOT為儲存library function位置的指標陣列,而lazy binding的機制,一開始不會得知真實位置,而是先填入位於plt的code

怎麼看GOT table的offset?

objdump -R <binary>
https://ithelp.ithome.com.tw/upload/images/20250813/201720887GVGtEugTs.png


上一篇
【Day-8】ASLR & PIE
下一篇
【Day-10】GOT hijacking
系列文
現在是pwn的天下!30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言